{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "bert_classify.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "c3EUFvW1YZ23"
      },
      "source": [
        "# -*- coding:utf-8 -*-\n",
        "# bert文本分类baseline模型\n",
        "# model: bert\n",
        "# date: 2021.10.10 10:01\n",
        "\n",
        "import os\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import torch\n",
        "import torch.nn as nn\n",
        "import torch.utils.data as Data\n",
        "import torch.optim as optim\n",
        "import transformers\n",
        "from transformers import AutoModel, AutoTokenizer\n",
        "import matplotlib.pyplot as plt"
      ],
      "execution_count": 38,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "honSDblyKbxc"
      },
      "source": [
        "train_curve = []\n",
        "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')"
      ],
      "execution_count": 39,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hNAVAq8o7Xbs"
      },
      "source": [
        "batch_size = 2\n",
        "epoches = 100\n",
        "model = \"bert-base-chinese\"\n",
        "hidden_size = 768\n",
        "n_class = 2\n",
        "maxlen = 8"
      ],
      "execution_count": 40,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wiq4EFV9LKO1"
      },
      "source": [
        "# data\n",
        "sentences = [\"我喜欢打篮球\", \"这个相机很好看\", \"今天玩的特别开心\", \"我不喜欢你\", \"太糟糕了\", \"真是件令人伤心的事情\"]\n",
        "labels = [1, 1, 1, 0, 0, 0]  # 1积极, 0消极.\n",
        "\n",
        "# word_list = ' '.join(sentences).split()\n",
        "# word_list = list(set(word_list))\n",
        "# word_dict = {w: i for i, w in enumerate(word_list)}\n",
        "# num_dict = {i: w for w, i in word_dict.items()}\n",
        "# vocab_size = len(word_list)"
      ],
      "execution_count": 41,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "xG31wox1EKVX"
      },
      "source": [
        "class MyDataset(Data.Dataset):\n",
        "  def __init__(self, sentences, labels=None, with_labels=True,):\n",
        "    self.tokenizer = AutoTokenizer.from_pretrained(model)\n",
        "    self.with_labels = with_labels\n",
        "    self.sentences = sentences\n",
        "    self.labels = labels\n",
        "  def __len__(self):\n",
        "    return len(sentences)\n",
        "\n",
        "  def __getitem__(self, index):\n",
        "    # Selecting sentence1 and sentence2 at the specified index in the data frame\n",
        "    sent = self.sentences[index]\n",
        "\n",
        "    # Tokenize the pair of sentences to get token ids, attention masks and token type ids\n",
        "    encoded_pair = self.tokenizer(sent,\n",
        "                    padding='max_length',  # Pad to max_length\n",
        "                    truncation=True,       # Truncate to max_length\n",
        "                    max_length=maxlen,  \n",
        "                    return_tensors='pt')  # Return torch.Tensor objects\n",
        "\n",
        "    token_ids = encoded_pair['input_ids'].squeeze(0)  # tensor of token ids\n",
        "    attn_masks = encoded_pair['attention_mask'].squeeze(0)  # binary tensor with \"0\" for padded values and \"1\" for the other values\n",
        "    token_type_ids = encoded_pair['token_type_ids'].squeeze(0)  # binary tensor with \"0\" for the 1st sentence tokens & \"1\" for the 2nd sentence tokens\n",
        "\n",
        "    if self.with_labels:  # True if the dataset has labels\n",
        "      label = self.labels[index]\n",
        "      return token_ids, attn_masks, token_type_ids, label\n",
        "    else:\n",
        "      return token_ids, attn_masks, token_type_ids"
      ],
      "execution_count": 42,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nMRNgixZLXLj"
      },
      "source": [
        "train = Data.DataLoader(dataset=MyDataset(sentences, labels), batch_size=batch_size, shuffle=True, num_workers=1)"
      ],
      "execution_count": 43,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "u25BycPb8IhR"
      },
      "source": [
        "# model\n",
        "class BertClassify(nn.Module):\n",
        "  def __init__(self):\n",
        "    super(BertClassify, self).__init__()\n",
        "    self.bert = AutoModel.from_pretrained(model, output_hidden_states=True, return_dict=True)\n",
        "    self.linear = nn.Linear(hidden_size, n_class)\n",
        "    self.dropout = nn.Dropout(0.5)\n",
        "  \n",
        "  def forward(self, X):\n",
        "    input_ids, attention_mask, token_type_ids = X[0], X[1], X[2]\n",
        "    outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids) # 返回一个output字典\n",
        "    # 用最后一层cls向量做分类\n",
        "    # outputs.pooler_output: [bs, hidden_size]\n",
        "    logits = self.linear(self.dropout(outputs.pooler_output))\n",
        "    \n",
        "    return logits"
      ],
      "execution_count": 44,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "DWmpHgE38dPM",
        "outputId": "2a0d44a5-0d89-4478-8f33-d0e326aeb1d8"
      },
      "source": [
        "bc = BertClassify().to(device)"
      ],
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "Some weights of the model checkpoint at bert-base-chinese were not used when initializing BertModel: ['cls.predictions.bias', 'cls.seq_relationship.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.seq_relationship.weight', 'cls.predictions.transform.LayerNorm.weight']\n",
            "- This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
            "- This IS NOT expected if you are initializing BertModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "oKn15V6oKG2B"
      },
      "source": [
        "optimizer = optim.Adam(bc.parameters(), lr=1e-3, weight_decay=1e-2)\n",
        "loss_fn = nn.CrossEntropyLoss()"
      ],
      "execution_count": 46,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "sFFxX8t2C4G0",
        "outputId": "38cff6f7-c1a9-48fb-ad18-dd28626382ca"
      },
      "source": [
        "# train\n",
        "sum_loss = 0\n",
        "total_step = len(train)\n",
        "for epoch in range(epoches):\n",
        "  for i, batch in enumerate(train):\n",
        "    optimizer.zero_grad()\n",
        "    batch = tuple(p.to(device) for p in batch)\n",
        "    pred = bc([batch[0], batch[1], batch[2]])\n",
        "    loss = loss_fn(pred, batch[3])\n",
        "    sum_loss += loss.item()\n",
        "\n",
        "    loss.backward()\n",
        "    optimizer.step()\n",
        "    if epoch % 10 == 0:\n",
        "      print('[{}|{}] step:{}/{} loss:{:.4f}'.format(epoch+1, epoches, i+1, total_step, loss.item()))\n",
        "  train_curve.append(sum_loss)\n",
        "  sum_loss = 0"
      ],
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[1|100] step:1/3 loss:1.1500\n",
            "[1|100] step:2/3 loss:1.2046\n",
            "[1|100] step:3/3 loss:2.5194\n",
            "[11|100] step:1/3 loss:1.1471\n",
            "[11|100] step:2/3 loss:0.7017\n",
            "[11|100] step:3/3 loss:0.8367\n",
            "[21|100] step:1/3 loss:1.0529\n",
            "[21|100] step:2/3 loss:1.4519\n",
            "[21|100] step:3/3 loss:1.4188\n",
            "[31|100] step:1/3 loss:1.2525\n",
            "[31|100] step:2/3 loss:1.2894\n",
            "[31|100] step:3/3 loss:0.6796\n",
            "[41|100] step:1/3 loss:1.2206\n",
            "[41|100] step:2/3 loss:0.7903\n",
            "[41|100] step:3/3 loss:0.9456\n",
            "[51|100] step:1/3 loss:0.4095\n",
            "[51|100] step:2/3 loss:0.4227\n",
            "[51|100] step:3/3 loss:1.7919\n",
            "[61|100] step:1/3 loss:2.2079\n",
            "[61|100] step:2/3 loss:1.0230\n",
            "[61|100] step:3/3 loss:1.0512\n",
            "[71|100] step:1/3 loss:0.5453\n",
            "[71|100] step:2/3 loss:0.2571\n",
            "[71|100] step:3/3 loss:1.0071\n",
            "[81|100] step:1/3 loss:1.1741\n",
            "[81|100] step:2/3 loss:0.6857\n",
            "[81|100] step:3/3 loss:0.2532\n",
            "[91|100] step:1/3 loss:0.5687\n",
            "[91|100] step:2/3 loss:0.4335\n",
            "[91|100] step:3/3 loss:0.8573\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "y03sGa73O-Xb",
        "outputId": "b2b0f256-c55e-42c7-b9e1-121823ba5f67"
      },
      "source": [
        "# test\n",
        "bc.eval()\n",
        "with torch.no_grad():\n",
        "  test_text = ['我不喜欢打篮球']\n",
        "  test = MyDataset(test_text, labels=None, with_labels=False)\n",
        "  x = test.__getitem__(0)\n",
        "  x = tuple(p.unsqueeze(0).to(device) for p in x)\n",
        "  pred = bc([x[0], x[1], x[2]])\n",
        "  pred = pred.data.max(dim=1, keepdim=True)[1]\n",
        "  if pred[0][0] == 0:\n",
        "    print('消极')\n",
        "  else:\n",
        "    print('积极')"
      ],
      "execution_count": 52,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "消极\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "u_d5OUCPSXgH",
        "outputId": "d266ed38-b7fa-4590-8640-c828d255ece6"
      },
      "source": [
        "pd.DataFrame(train_curve).plot() # loss曲线"
      ],
      "execution_count": 51,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.axes._subplots.AxesSubplot at 0x7f147ab95e50>"
            ]
          },
          "metadata": {},
          "execution_count": 51
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Tlda0rBjX0vN"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}